package com.example.mkio.androidpractice.codes;

import android.content.Context;

/**
 * Created by mk.io on 17-6-7.
 * <p>
 * 单例模式的优化  -- 避免内存泄露
 * <p>
 * 这是一个普通的单例模式，当创建这个单例的时候，由于需要传入一个Context，所以这个Context的生命周期的长短至关重要：
 * <p>
 * 1、如果此时传入的是 Application 的 Context，因为 Application 的生命周期就是整个应用的生命周期，所以这将没有任何问题。
 * <p>
 * 2、如果此时传入的是 Activity 的 Context，当这个 Context 所对应的 Activity 退出时，由于该 Context 的引用被单例对象所持有，其生命周期等于整个应用程序的生命周期，所以当前 Activity 退出时它的内存并不会被回收，这就造成泄漏了。
 */

public class AppManager {
    private static AppManager mAppManager;
    private Context mContext;

    public AppManager(Context context) {
        this.mContext = context.getApplicationContext();// 使用Application 的context
    }

    public static AppManager getInstance(Context context) {
        if (mAppManager == null) {
            mAppManager = new AppManager(context);
        }
        return mAppManager;
    }
}

//或者这样写，连 Context 都不用传进来了：
//
//        在你的 Application 中添加一个静态方法，getContext() 返回 Application 的 context，
//
//        ...
//
//        context = getApplicationContext();
//
//        ...
///**
// * 获取全局的context
// * @return 返回全局context对象
// */
//public static Context getContext(){
//        return context;
//        }
//
//public class AppManager {
//    private static AppManager instance;
//    private Context context;
//    private AppManager() {
//        this.context = MyApplication.getContext();// 使用Application 的context
//    }
//    public static AppManager getInstance() {
//        if (instance == null) {
//            instance = new AppManager();
//        }
//        return instance;
//    }
//}